package main

import (
	"context"
	"errors"
	"google.golang.org/grpc"
	"grpc-learning/proto/user"
	"log"
	"net"
)

/*
// 定义服务名
type UserServer interface {
	// 定义rpc方法
	GetUser(context.Context, *GetUserReq) (*GetUserResp, error)
}
*/

// 定义一个服务
type UserServer struct{}

// 实现接口
func (*UserServer) GetUser(ctx context.Context, req *user.GetUserReq) (*user.GetUserResp, error) {
	// 编写具体的业务逻辑代码
	if u, ok := users[req.Id]; ok {
		return &user.GetUserResp{
			Id:    u.ID,
			Name:  u.Username,
			Phone: u.Password,
		}, nil
	}

	return nil, errors.New("没有找到用户")
}

// 启动服务
func main() {
	// 监听端口
	listen, err := net.Listen("tcp", ":8001")
	if err != nil {
		log.Fatal("监听失败", err)
	}

	// 创建服务
	s := grpc.NewServer()

	// 注册服务
	user.RegisterUserServer(s, new(UserServer))

	log.Println("服务已启动")
	// 启动服务
	s.Serve(listen)

	/*
		其实在使用上，gprc 与原生的 net/rpc 有很多相似的地方
	*/
}
